// 创建slice需要：
// 一个字符串名称来标识切片
// 一个初始state
// 以及一个或多个定义了该如何更新state的reducer函数。

// slice创建后，我们可以导出slice中生成的Redux action cretors和reducer函数。

// Redux 要求我们创建数据副本和更新数据副本，来实现不可变地写入所有状态更新。
// 不过Redux Toolkit createSlice和createReducer在内部使用Immer允许我们编写“可变”的更新逻辑，变成正确的不可变更新。

import { createSlice } from '@reduxjs/toolkit'

export const counterSlice = createSlice({
    name: 'counter',
    initialState: {
        value: 0
    },
    reducers: {
        increment: (state) => {
            // Redux Toolkit允许我们在reducers写“可变”逻辑。
            // 它不是真正的改变状态值，因为它使用了Immer库，
            // 可以检测到“草稿状态”的变化并且基于这些变化产生全新的不可变的状态
            state.value += 1
        },
        decrement: (state) => {
            state.value -= 1
        },
        incrementByAmount: (state,action) => {
            console.log('action',action)
            state.value += action.payload
        }
    }
})

// 每个 case reducer 函数会生成对应的 Action Creators
// 很好奇，counterSlice.actions 如何生成的？？？
export const { increment, decrement,incrementByAmount } = counterSlice.actions

console.log('counterSlice.actions',counterSlice.actions)
console.log('increment',increment)

export default counterSlice.reducer